package com.qch.concurrent.demo_07_daemon_stop_elegant;

/**
 * @Author qch
 * @Date 2021/7/29
 * 优雅的关闭线程
 *
 * 但上面的代码有一个问题：如果MyThread t在while循环中阻塞在某个地方，例如里面调用了
 * object.wait()函数，那它可能永远没有机会再执行 while( ! stopped)代码，也就一直无法退出循环。
 * 此时，就要用到InterruptedException()与interrupt()函数。
 */
public class MyThread extends Thread {
    private boolean flag=true;
    @Override
    public void run() {
        while (flag)
        {
            System.out.println("线程正在运行");
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    //用于关闭线程
    public void stopRunning()
    {
        this.flag=false;
    }

    public static void main(String[] args) throws InterruptedException {
        MyThread myThread = new MyThread();
        myThread.start();
        System.out.println("myThread.getName"+myThread.getName());
        System.out.println("Thread.currentThread"+Thread.currentThread());
        //。Sleep函数就是干这事的，他告诉操作系统“在未来的多少毫秒内我不参与CPU竞争”
        Thread.sleep(3000);
        //置标志位
        myThread.stopRunning();
        //等线程运行结束，主线程再退出
        myThread.join();
        System.out.println("main线程退出");
    }
}
